The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
The web has made it easy to provide and consume content of any form. For example, building a web block, starting a blog, and making both searchable for the public have become a commodity. Furthermore, large scale services such as photo sharing, video sharing, and social networking have become commonplace. These services all require basic ingredients such as storage, CPUs, and network bandwidth.
The goal of “utility computing” is to provide the basic ingredients of higher-level services as a commodity by specialized utility providers at low unit cost. Ideally, utility computing would provide full availability so that users can read and write data at any time without ever being blocked, with response times that are virtually constant and do not depend on the number of concurrent users, the amount of stored data, or any other system parameter.
One popular utility service in use today is simple storage service (S3) which provides a simple get and put interface in order to store and retrieve data. S3 provides the same functionality as a local disk, but is implemented on distributed hardware. Thus, clients using an S3 system interact with a “virtualized disk”, rather than an actual disk. When clients use S3 to store data on the virtualized disk, the data may actually be stored in different buckets (e.g., servers or other data repositories). Within each bucket, the data is typically identified by a user assigned key.
Typically, utility services allow different clients to independently access and update the data stored on the virtualized disk. However, when using storage services such as S3, clients do not have the same consistency safeguards that are provided by other systems, such as database servers. For example, updates may not necessarily be applied in the same order as they were initiated. Without such consistency safeguards, there are many applications for which storage services would be inappropriate.